//包含静态库中的头文件
#include"mymath.h"

//包含动态库的头文件：
#include"myprint.h"
#include"mylog.h"

//动静态库的区别：
//静态库：在编译的时候被链接到最终的可执行文件中，意味着静态库中的数据和代码会直接复制到可执行文件中，这样会增加最终文件的大小，并且每个使用该静态库的进程都会拷贝一份代码副本到自己的执行文件中，会增加内存的使用，并且更难维护，但是静态库可移植性更强
//动态库：在程序运行时才被加载，在程序运行时由操作系统帮我们加载对应的数据和代码，每个使用该库的进程在使用的时候加载到共享区都可以使用，大大减少内存的使用，更容易维护，但是依赖于版本，可移植性有可能没那么强
//现象：编译好可执行文件后，删除掉静态库，不影响可执行程序的运行：说明静态库已经赋值一份到可执行文件中了，但是删除动态库就不能运行，因为动态库是运行的时候加载的，可执行程序中并没有副本


//ldd 是 Linux 系统中的一个命令，用于显示一个可执行文件或共享库所依赖的共享库。
//可以使用ldd命令看对应的可执行程序的共享库是否正确找到


int main()
{

  Print();
  Log("hello");
  printf("%d\n",add(1,4));

  return 0;
}
//使用命令生成可执行文件：（需要把所有要连接的库都链接上） gcc main.c -I mylib/include/ -L mylib/lib/ -lmymath -lmymethod
//注意：虽然我们gcc的时候指定了对应的 动态库，但是加载的时候依然会找不到，所以就要用以下方法解决：
//生成可执行文件后，加载的时候却找不到动态库的解决方法：
//1，sudo ln -s /home/hxk/lesson/mylib/dynamic_lib/test/mylib/lib/libmymethod.so /lib64/libmymethod.so 
//建立软连接在默认的库路径下，这样编译器查找到这个软链接的时候就会直接跳转到我们设定的路径下去寻找对应的库

//2,export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hxk/lesson/mylib/dynamic_lib/test/mylib/lib
//LD_LIBRARY_PATH这是一个环境变量，Linux 动态链接器使用这个变量来查找共享库的路径。在运行动态链接的可执行文件时，系统会在这个路径中查找需要的共享库
//所以我们在这个动态库默认路径的环境变量中添加我们的动态库绝对路径就可以被找到了
//但是这个方法有局限性，每次重启的时候环境变量就会重置为系统默认环境变量，此时我们设置的就会被清除，可执行程序就找不到对应的库了
//如果你希望这个修改在每次打开新终端时都生效，可以在你的 ~/.bashrc 或 ~/.bash_profile 文件中添加新的 export 命令，手动设置 LD_LIBRARY_PATH


//3，最基本的方法：把库拷贝到系统默认路径下（静态库的main中演示了），就可以使用了   库默认路径：/lib64


//4，在/etc/ld.so.conf.d 建立积极的动态库路径的配置文件，然后重新ldconfig即可
//就是使用root身份在/etc/ld.so.conf.d路径下建立一个mylib.conf文件然后把我们动态库的绝对路径/home/hxk/lesson/mylib/dynamic_lib/test/mylib/lib写入即可，然后使用ldconfig重新配置一下该文件即可
//动态库文件配置完成后，我们的可执行文件也可以链接到我们的动态库了

//所以动态库在系统中加载后会被所有的进程共享

//总结：其实我们使用别人成熟的动静态库都是直接安装在系统默认路径下的方式，其他方法作为我们的了解，让我们更加理解了这个链接的过程了，和软连接的本质就是路径
